home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 20
/
Cream of the Crop 20 (Terry Blount) (1996).iso
/
utility
/
freedos.zip
/
COM050.ZIP
/
REDIR.C
< prev
next >
Wrap
C/C++ Source or Header
|
1996-01-17
|
2KB
|
84 lines
/*
* REDIR.C
*
*
*
* Comments:
*
* 12/15/95 (Tim Norman) ---------------------------------------------------
* started.
*
*/
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int is_redir (char c)
{
return c == '<' || c == '>' || c == '|';
}
/* gets the redirection from the command line and chops it out of the */
/* command line */
void get_redirection (char *s, char *in, char *out, char *pipe[128], int *num)
{
int count, start, inquote = 0, numpipes = 0;
/* find and remove all the redirections first */
for (count = 0; s[count]; count++)
if (s[count] == '"')
inquote = !inquote;
else if (!inquote && (s[count] == '<' || s[count] == '>'))
{
/* MS-DOS ignores multiple redirection symbols and uses the last */
/* redirection, so we'll emulate that and not check */
/* find the next word */
start = count;
count++;
/* skip over whitespace */
while (isspace (s[count]))
count++;
/* skip until we hit whitespace or a delimiter of some sort */
while (!is_redir (s[count]) && s[count] && !isspace (s[count]))
count++;
if (s[start] == '<')
{
memcpy (in, &s[start+1], count - start - 1);
in[count - start - 1] = 0;
}
else if (s[start] == '>')
{
memcpy (out, &s[start+1], count - start - 1);
out[count - start - 1] = 0;
}
memmove (&s[start], &s[count], strlen (&s[count]) + 1);
/* move back one so we can check this character */
count = start - 1;
}
/* now go after the pipes */
pipe[numpipes++] = s;
for (count = 0; s[count]; count++)
if (s[count] == '"')
inquote = !inquote;
else if (!inquote && s[count] == '|')
{
s[count] = 0;
pipe[numpipes++] = &s[count + 1];
}
pipe[numpipes] = NULL;
*num = numpipes;
}